home *** CD-ROM | disk | FTP | other *** search
/ Assassins - Ultimate CD Games Collection 4 / Assassins 4 (1999)(Weird Science).iso / misc / omega / source / mtalk.c < prev    next >
Encoding:
C/C++ Source or Header  |  1997-05-02  |  19.4 KB  |  768 lines

  1. /* omega copyright (c) 1987,1988,1989 by Laurence Raphael Brothers */
  2. /* mtalk.c */
  3. /* monster talk functions */
  4.  
  5. #include "glob.h"
  6.  
  7.  
  8. /* The druid's altar is in the northern forest */
  9. void m_talk_druid(m)
  10. struct monster *m;
  11. {
  12.   int i;
  13.   pml curr;
  14.  
  15.   if (! m_statusp(m,HOSTILE)) {
  16.     print1("The Archdruid raises a hand in greeting.");
  17.     if (! gamestatusp(SPOKE_TO_DRUID)) {
  18.       setgamestatus(SPOKE_TO_DRUID);
  19.       morewait();
  20.       print1("The Archdruid congratulates you on reaching his sanctum.");
  21.       print2("You feel competent.");
  22.       morewait();
  23.       gain_experience(300);
  24.       if (Player.patron == DRUID) {
  25.     print1("The Archdruid conveys to you the wisdom of nature....");
  26.     print2("You feel like a sage.");
  27.     morewait();
  28.     for(i=0;i<NUMRANKS;i++) {
  29.       if (Player.guildxp[i] > 0)
  30.         Player.guildxp[i] += 300;
  31.     }
  32.       }
  33.     }
  34.     mprint("Do you request a ritual of neutralization? [yn] ");
  35.     if (ynq() == 'y') {
  36.       if (Phase/2 == 6 || Phase/2 == 0) {    /* full or new moon */
  37.     mprint("\"Unfortunately, I cannot perform a ritual of balance on");
  38.     if (Phase/2 == 6)
  39.       mprint("this lawful day.\"");
  40.     else
  41.       mprint("this chaotic day.\"");
  42.       }
  43.       else if (Phase/2 == 3 || Phase/2 == 9) {    /* half moon */
  44.     mprint("You take part in today's holy celebration of balance...");
  45.     Player.alignment = 0;
  46.     Player.mana = calcmana();
  47.     if (Player.patron == DRUID)
  48.       gain_experience(200);    /* if a druid wants to spend 2 days */
  49.     Time+=60;        /* celebrating for 1600 xp, why not? */
  50.     hourly_check();
  51.     Time+=60;
  52.     hourly_check();
  53.     Time+=60;
  54.     hourly_check();
  55.     Time+=60;
  56.     hourly_check();
  57.     Time+=60;
  58.     hourly_check();
  59.     Time+=60;
  60.     hourly_check();
  61.       }
  62.       else {
  63.     mprint("The ArchDruid conducts a sacred rite of balance...");
  64.     if (Player.patron == DRUID) {
  65.       Player.alignment = 0;
  66.       Player.mana = calcmana();
  67.     }
  68.     else
  69.       Player.alignment -= Player.alignment*max(0, 10 - Player.level)/10;
  70.       /* the higher level the character is, the more set in his/her ways */
  71.     Time+=60;
  72.     hourly_check();
  73.       }
  74.       dataprint();
  75.     }
  76.   }
  77.   else {
  78.     mprint("The ArchDruid looks at you and cries: 'Unclean! Unclean!'");
  79.     disrupt(Player.x,Player.y,100);
  80.     mprint("This seems to have satiated his desire for vengeance.");
  81.     mprint("'Have you learned your lesson?' The ArchDruid asks. [yn] ");
  82.     if (ynq()) {
  83.       mprint("'I certainly hope so!' says the ArchDruid.");
  84.       for (curr = Level->mlist; curr; curr = curr->next)
  85.     m_status_reset(curr->m, HOSTILE);
  86.       m_vanish(m);
  87.     }
  88.     else {
  89.       mprint("'Idiot.' mutters the ArchDruid.");
  90.       p_damage(500,UNSTOPPABLE,"the ArchDruid's Vengeance");
  91.     }
  92.   }
  93. }
  94.  
  95.  
  96. void m_talk_silent(m)
  97. struct monster *m;
  98. {
  99.  
  100.   int reply = random_range(4);
  101.   
  102.   if (m->uniqueness == COMMON) {
  103.     strcpy(Str2,"The ");
  104.     strcat(Str2,m->monstring);
  105.   }
  106.   else strcpy(Str2,m->monstring);
  107.   switch (reply) {
  108.     case 0:strcat(Str2," does not reply. "); break;
  109.     case 1:strcat(Str2," shrugs silently. "); break;
  110.     case 2:strcat(Str2," hold a finger to his mouth. "); break;
  111.     case 3:strcat(Str2," glares at you but says nothing. "); break;
  112.   }      
  113.   mprint(Str2);
  114. }
  115.  
  116. void m_talk_stupid(m)
  117. struct monster *m;
  118. {
  119.  
  120.   int reply = random_range(4);
  121.   if (m->uniqueness == COMMON) {
  122.     strcpy(Str2,"The ");
  123.     strcat(Str2,m->monstring);
  124.   }
  125.   else strcpy(Str2,m->monstring);
  126.   switch (reply) {
  127.     case 0:strcat(Str2," looks at you with mute incomprehension."); break;
  128.     case 1:strcat(Str2," growls menacingly and ignores you."); break;
  129.     case 2:strcat(Str2," does not seem to have heard you."); break;
  130.     case 3:strcat(Str2," tries to pretend it didn't hear you."); break;
  131.   }      
  132.   mprint(Str2);
  133. }
  134.  
  135. void m_talk_greedy(m)
  136. struct monster *m;
  137. {
  138.  
  139.   int reply = random_range(4);
  140.   if (m->uniqueness == COMMON) {
  141.     strcpy(Str2,"The ");
  142.     strcat(Str2,m->monstring);
  143.   }
  144.   else strcpy(Str2,m->monstring);
  145.   switch (reply) {
  146.     case 0:strcat(Str2," says: Give me a treasure.... ");break;
  147.     case 1:strcat(Str2," says: Stand and deliver, knave! "); break;
  148.     case 2:strcat(Str2," says: Your money or your life! "); break;
  149.     case 3:strcat(Str2," says: Yield or Die! "); break;
  150.   }      
  151.   mprint(Str2);
  152. }
  153.  
  154. void m_talk_hungry(m)
  155. struct monster *m;
  156. {
  157.  
  158.   int reply = random_range(4);
  159.   if (m->uniqueness == COMMON) {
  160.     strcpy(Str2,"The ");
  161.     strcat(Str2,m->monstring);
  162.   }
  163.   else strcpy(Str2,m->monstring);
  164.   switch (reply) {
  165.     case 0:strcat(Str2," says: I hunger, foolish adventurer! "); break;
  166.     case 1:strcat(Str2," drools menacingly at you. "); break;
  167.     case 2:strcat(Str2," says: You're invited to be lunch! "); break;
  168.     case 3:strcat(Str2," says: Feeed Meee! "); break;
  169.   }      
  170.   mprint(Str2);
  171. }
  172.  
  173.  
  174. void m_talk_guard(m)
  175. struct monster *m;
  176. {
  177.   if (m_statusp(m,HOSTILE)) {
  178.     print1("'Surrender in the name of the Law!'");
  179.     print2("Do it? [yn] ");
  180.     if (ynq2()=='y') {
  181.       Player.alignment++;
  182.       if (Current_Environment == E_CITY) {
  183.     print1("Go directly to jail. Do not pass go, do not collect 200Au.");
  184.     print2("You are taken to the city gaol.");
  185.     morewait();
  186.     send_to_jail();
  187.     drawvision(Player.x,Player.y);
  188.       }
  189.       else {
  190.     clearmsg();
  191.     print1("Mollified, the guard disarms you and sends you away.");
  192.     dispose_lost_objects(1,Player.possessions[O_WEAPON_HAND]);
  193.     pacify_guards();
  194.       }
  195.     }
  196.     else {
  197.       clearmsg();
  198.       print1("All right, you criminal scum, you asked for it!");
  199.     }
  200.   }
  201.   else if (Player.rank[ORDER]>0) 
  202.     print1("'Greetings comrade! May you always tread the paths of Law.'");
  203.   else print1("Move it right along, stranger!");
  204. }
  205.  
  206.  
  207. void m_talk_mp(m)
  208. struct monster *m;
  209. {
  210.   mprint("The mendicant priest asks you to spare some treasure for the needy");
  211. }
  212.  
  213.  
  214. void m_talk_titter(m)
  215. struct monster *m;
  216. {
  217.  
  218.   if (m->uniqueness == COMMON) {
  219.     strcpy(Str2,"The ");
  220.     strcat(Str2,m->monstring);
  221.   }
  222.   else strcpy(Str2,m->monstring);
  223.   strcat(Str2," titters obscenely at you.");
  224.   mprint(Str2);
  225. }
  226.  
  227.  
  228. void m_talk_ninja(m)
  229. struct monster *m;
  230. {
  231.   mprint("The black-garbed figure says apologetically:");
  232.   mprint("'Situree simasita, wakarimasen.'");
  233. }
  234.  
  235.  
  236.  
  237.  
  238. void m_talk_thief(m)
  239. struct monster *m;
  240. {
  241.   if (Player.rank[THIEVES]) {
  242.     if (m->level == 2) 
  243.       m->monstring = "sneak thief";
  244.     else m->monstring = "master thief";
  245.     print1("The cloaked figure makes a gesture which you recognize...");
  246.     print2("...the thieves' guild recognition signal!");
  247.     print3("'Sorry, mate, thought you were a mark....'");
  248.     morewait();
  249.     m_vanish(m);
  250.   }
  251.   else m_talk_man(m);
  252.  
  253. }
  254.  
  255.  
  256.  
  257. void m_talk_assassin(m)
  258. struct monster *m;
  259. {
  260.   m->monstring = "master assassin";
  261.   print1("The ominous figure does not reply, but hands you an embossed card:");
  262.   print2("'Guild of Assassins Ops are forbidden to converse with targets.'");
  263. }
  264.     
  265.  
  266. void m_talk_im(m)
  267. struct monster *m;
  268. {
  269.   if (strcmp(m->monstring,"itinerant merchant") != 0) {
  270.     m->monstring = "itinerant merchant";
  271.   }
  272.   if (m->possessions == NULL)
  273.     mprint("The merchant says: Alas! I have nothing to sell!");
  274.   else {
  275.     m->possessions->thing->known = 2;
  276.     clearmsg();
  277.     mprint("I have a fine");
  278.     mprint(itemid(m->possessions->thing));
  279.     mprint("for only");
  280.     mlongprint(max(10,4*true_item_value(m->possessions->thing)));
  281.     mprint("Au.");
  282.     mprint("Want it? [yn] ");
  283.     if (ynq()=='y') {
  284.       if (Player.cash < (max(10,4*true_item_value(m->possessions->thing)))) {
  285.     if (Player.alignment > 10) {
  286.       mprint("Well, I'll let you have it for what you've got.");
  287.       Player.cash = 0;
  288.       gain_item(m->possessions->thing);
  289.       m->possessions = NULL;
  290.     }
  291.     else mprint("Beat it, you deadbeat!");
  292.       }
  293.       else {
  294.     mprint("Here you are. Have a good day.");
  295.     Player.cash -= max(10,(4*item_value(m->possessions->thing)));
  296.     gain_item(m->possessions->thing);
  297.     m->possessions = NULL;
  298.       }
  299.     }
  300.     else mprint("Well then, I must be off. Good day.");
  301.     m_vanish(m);
  302.   }
  303. }
  304.  
  305.  
  306. void m_talk_man(m)
  307. struct monster *m;
  308. {
  309.  
  310.   if (m->uniqueness == COMMON) {
  311.     strcpy(Str2,"The ");
  312.     strcat(Str2,m->monstring);
  313.   }
  314.   else strcpy(Str2,m->monstring);
  315.   switch (random_range(5)) {
  316.     case 0:strcat(Str2," asks you for the way home."); break;
  317.     case 1:strcat(Str2," wishes you a pleasant day."); break;
  318.     case 2:strcat(Str2," sneers at you contemptuously."); break;
  319.     case 3:strcat(Str2," smiles and nods."); break;
  320.     case 4:strcat(Str2," tells you a joke."); break;
  321.   }
  322.   mprint(Str2);
  323. }
  324.  
  325.  
  326. void m_talk_evil(m)
  327. struct monster *m;
  328. {
  329.  
  330.   if (m->uniqueness == COMMON) {
  331.     strcpy(Str2,"The ");
  332.     strcat(Str2,m->monstring);
  333.   }
  334.   else strcpy(Str2,m->monstring);
  335.   switch (random_range(14)) {
  336.     case 0:strcat(Str2," says: 'THERE CAN BE ONLY ONE!'"); break;
  337.     case 1:strcat(Str2," says: 'Prepare to die, Buckwheat!'"); break;
  338.     case 2:strcat(Str2," says: 'Time to die!'"); break;
  339.     case 3:strcat(Str2," says: 'There will be no mercy.'"); break;
  340.     case 4:strcat(Str2," insults your mother-in-law."); break;
  341.     case 5:strcat(Str2," says: 'Kurav tu ando mul!'");
  342.     case 6:strcat(Str2," says: '!va al infierno!'"); break;
  343.     case 7:strcat(Str2," says: 'dame desu, nee.'"); break;
  344.     case 8:strcat(Str2," spits on your rug and calls your cat a bastard."); 
  345.       break;
  346.     case 9:strcat(Str2," snickers malevolently and draws a weapon."); break;
  347.     case 10:strcat(Str2," sends 'rm -r *' to your shell!"); break;
  348.     case 11:strcat(Str2," tweaks your nose and cackles evilly."); break;
  349.     case 12:strcat(Str2," thumbs you in the eyes."); break;
  350.     case 13:strcat(Str2," kicks you in the groin."); break;
  351.   }
  352.   mprint(Str2);
  353. }
  354.  
  355.  
  356. void m_talk_robot(m)
  357. struct monster *m;
  358. {
  359.   if (m->uniqueness == COMMON) {
  360.     strcpy(Str2,"The ");
  361.     strcat(Str2,m->monstring);
  362.   }
  363.   else strcpy(Str2,m->monstring);
  364.   switch (random_range(4)) {
  365.     case 0:strcat(Str2," says: 'exterminate...Exterminate...EXTERMINATE!!!'");
  366.       break;
  367.     case 1:strcat(Str2," says: 'Kill ... Crush ... Destroy'");
  368.       break;
  369.     case 2:strcat(Str2," says: 'Danger -- Danger'");
  370.       break;
  371.     case 3:strcat(Str2," says: 'Yo Mama -- core dumped.'");
  372.       break;
  373.   }
  374.   mprint(Str2);
  375. }
  376.  
  377. void m_talk_slithy(m)
  378. struct monster *m;
  379. {
  380.   mprint("It can't talk -- it's too slithy!");
  381. }
  382.  
  383.  
  384. void m_talk_mimsy(m)
  385. struct monster *m;
  386. {
  387.   mprint("It can't talk -- it's too mimsy!");
  388. }
  389.  
  390.  
  391.  
  392. void m_talk_burble(m)
  393. struct monster *m;
  394. {
  395.  
  396.   if (m->uniqueness == COMMON) {
  397.     strcpy(Str2,"The ");
  398.     strcat(Str2,m->monstring);
  399.   }
  400.   else strcpy(Str2,m->monstring);
  401.   strcat(Str2," burbles hatefully at you.");
  402.   mprint(Str2);
  403. }
  404.  
  405.  
  406.  
  407.  
  408. void m_talk_beg(m)
  409. struct monster *m;
  410. {
  411.   if (m->uniqueness == COMMON) {
  412.     strcpy(Str2,"The ");
  413.     strcat(Str2,m->monstring);
  414.   }
  415.   else strcpy(Str2,m->monstring);
  416.   strcat(Str2," asks you for alms.");
  417.   mprint(Str2);
  418. }
  419.  
  420.  
  421. void m_talk_hint(m)
  422. struct monster *m;
  423. {
  424.   if (m->uniqueness == COMMON) {
  425.     strcpy(Str2,"The ");
  426.     strcat(Str2,m->monstring);
  427.   }
  428.   else strcpy(Str2,m->monstring);
  429.   if (m_statusp(m,HOSTILE)) {
  430.     strcat(Str2," only sneers at you. ");
  431.     mprint(Str2);
  432.   }
  433.   else {
  434.     strcat(Str2," whispers in your ear: ");
  435.     mprint(Str2);
  436.     hint();
  437.     m->talkf = M_TALK_SILENT;
  438.   }
  439. }
  440.  
  441. void m_talk_gf(m)
  442. struct monster *m;
  443. {
  444.   mprint("The good fairy glints: Would you like a wish?");
  445.   if (ynq()=='y') {
  446.     mprint("The good fairy glows: Are you sure?");
  447.     if (ynq()=='y') {
  448.       mprint("The good fairy radiates: Really really sure?");
  449.       if (ynq()=='y') {
  450.     mprint("The good fairy beams: I mean, like, sure as sure can be?");
  451.     if (ynq()=='y') {
  452.       mprint("The good fairy dazzles: You don't want a wish, right?");
  453.       if (ynq()=='y') mprint("The good fairy laughs: I thought not.");
  454.       else wish(0);
  455.     }
  456.       }
  457.     }
  458.   }
  459.   mprint("In a flash of sweet-smelling light, the fairy vanishes....");
  460.   Player.hp = max(Player.hp,Player.maxhp);
  461.   Player.mana = max(Player.mana,calcmana());
  462.   mprint("You feel mellow.");
  463.   m_vanish(m);
  464. }
  465.  
  466. void m_talk_ef(m)
  467. struct monster *m;
  468. {
  469.   mprint("The evil fairy roils: Eat my pixie dust!");
  470.   mprint("She waves her black-glowing wand, which screams thinly....");
  471.   m->movef=M_MOVE_SMART;
  472.   m->meleef=M_MELEE_POISON;
  473.   m->specialf=M_SP_THIEF;
  474.   acquire(-1);
  475.   bless(-1);
  476.   sleep_player(m->level/2);
  477.   summon(-1,-1);
  478.   summon(-1,-1);
  479.   summon(-1,-1);
  480.   summon(-1,-1);
  481. }
  482.  
  483.  
  484. void m_talk_seductor(m)
  485. struct monster *m;
  486. {
  487.   if (m->uniqueness == COMMON) {
  488.     strcpy(Str2,"The ");
  489.     strcat(Str2,m->monstring);
  490.   }
  491.   else strcpy(Str2,m->monstring);
  492.   if (Player.preference == 'n')
  493.   {
  494.     strcat(Str2, " notices your disinterest and leaves with a pout.");
  495.     mprint(Str2);
  496.   }
  497.   else
  498.   {
  499.     strcat(Str2," beckons seductively...");
  500.     mprint(Str2);
  501.     mprint("Flee? [yn] ");
  502.     if (ynq()=='y') {
  503.       mprint("You feel stupid.");
  504.     }
  505.     else {
  506.       strcpy(Str2,"The ");
  507.       strcat(Str2,m->monstring);
  508.       strcat(Str2," shows you a good time....");
  509.       mprint(Str2);
  510.       gain_experience(500);
  511.       Player.con++;
  512.     }
  513.   }
  514.   m_vanish(m);
  515. }
  516.  
  517.  
  518. void m_talk_demonlover(m)
  519. struct monster *m;
  520. {
  521.   if (m->uniqueness == COMMON) {
  522.     strcpy(Str2,"The ");
  523.     strcat(Str2,m->monstring);
  524.   }
  525.   else strcpy(Str2,m->monstring);
  526.   if (Player.preference == 'n')
  527.   {
  528.     strcat(Str2, " notices your disinterest and changes with a snarl...");
  529.     mprint(Str2);
  530.     morewait();
  531.   }
  532.   else
  533.   {
  534.     strcat(Str2," beckons seductively...");
  535.     mprint(Str2);
  536.     mprint("Flee? [yn] ");
  537.     if (ynq()=='y') 
  538.       mprint("You feel fortunate....");
  539.     else {
  540.       if (m->uniqueness == COMMON) {
  541.     strcpy(Str2,"The ");
  542.     strcat(Str2,m->monstring);
  543.       }
  544.       else strcpy(Str2,m->monstring);
  545.       strcat(Str2," shows you a good time....");
  546.       mprint(Str2);
  547.       morewait();
  548.       mprint("You feel your life energies draining...");
  549.       level_drain(random_range(3)+1,"a demon's kiss");
  550.       morewait();
  551.     }
  552.   }
  553.   m->talkf = M_TALK_EVIL;
  554.   m->meleef = M_MELEE_SPIRIT;
  555.   m->specialf = M_SP_DEMON;
  556.  
  557.   if ((m->monchar&0xff) == 's') {
  558.     m->monchar = 'I'|COL_RED;
  559.     m->monstring = "incubus";
  560.   }
  561.   else {
  562.     m->monchar = 'S'|COL_RED;
  563.     m->monstring = "succubus";
  564.   }
  565.   if (m->uniqueness == COMMON) {
  566.     strcpy(Str2,"The ");
  567.     strcat(Str2,m->monstring);
  568.   }
  569.   else strcpy(Str2,m->monstring);
  570.   strcat(Str2," laughs insanely.");
  571.   mprint(Str2);
  572.   mprint("You now notice the fangs, claws, batwings...");
  573. }
  574.  
  575.  
  576. void m_talk_horse(m)
  577. struct monster *m;
  578. {
  579.   if (m_statusp(m,HOSTILE)) 
  580.     mprint("The horse neighs angrily at you.");
  581.   else if (m_statusp(m,HUNGRY))
  582.     mprint("The horse noses curiously at your pack.");
  583.   else if (gamestatusp(MOUNTED))
  584.     mprint("The horse and your steed don't seem to get along.");
  585.   else if (Current_Environment == Current_Dungeon)
  586.     mprint("The horse shies; maybe he doesn't like the dungeon air....");
  587.   else {
  588.     mprint("The horse lets you pat his nose. Want to ride him? [yn] ");
  589.     if (ynq()=='y') {
  590.       m->hp = -1;
  591.       Level->site[m->x][m->y].creature = NULL;
  592.       putspot(m->x,m->y,getspot(m->x,m->y,FALSE));
  593.       setgamestatus(MOUNTED);
  594.       calc_melee();
  595.       mprint("You are now equitating!");
  596.     }
  597.   }
  598. }
  599.  
  600. void m_talk_hyena(m)
  601. struct monster *m;
  602. {
  603.   mprint("The hyena only laughs at you...");
  604. }
  605.  
  606. void m_talk_parrot(m)
  607. struct monster *m;
  608. {
  609.   mprint("Polly wanna cracker?");
  610. }
  611.  
  612.  
  613. void m_talk_servant(m)
  614. struct monster *m;
  615. {
  616.   int target,x=Player.x,y=Player.y;
  617.   if (m->id == ML4+12) {
  618.     target = ML4+13;
  619.     mprint("The Servant of Law pauses in thought for a moment.");
  620.     mprint("You are asked: Are there any Servants of Chaos hereabouts? [yn] ");
  621.   }
  622.   else {
  623.     target = ML4+12;
  624.     mprint("The Servant of Chaos grins mischievously at you.");
  625.     mprint("You are asked: Are there any Servants of Law hereabouts? [yn] ");
  626.   }
  627.   if (ynq()=='y') {
  628.     print1("Show me.");
  629.     show_screen();
  630.     drawmonsters(TRUE);
  631.     setspot(&x,&y);
  632.     if (Level->site[x][y].creature != NULL) {
  633.       if (Level->site[x][y].creature->id == target) {
  634.     mprint("The Servant launches itself towards its enemy.");
  635.     mprint("In a blaze of combat, the Servants annihilate each other!");
  636.     gain_experience(m->xpv);
  637.     m_death(Level->site[x][y].creature);
  638.     Level->site[m->x][m->y].creature = NULL;
  639.     m->x = x;
  640.     m->y = y;
  641.     Level->site[x][y].creature = m;
  642.     m_death(Level->site[x][y].creature);
  643.       }
  644.       else mprint("Right. Tell me about it. Idiot!");
  645.     }
  646.     else mprint("Right. Tell me about it. Idiot!");
  647.   }
  648.   else mprint("The servant shrugs and turns away.");
  649. }
  650.  
  651.  
  652. void m_talk_animal(m)
  653. struct monster *m;
  654. {
  655.   if (m->uniqueness == COMMON) {
  656.     strcpy(Str2,"The ");
  657.     strcat(Str2,m->monstring);
  658.   }
  659.   else strcpy(Str2,m->monstring);
  660.   mprint(Str2);
  661.   mprint("shows you a scholarly paper by Dolittle, D. Vet.");
  662.   mprint("which demonstrates that animals don't have speech centers");
  663.   mprint("complex enough to communicate in higher languages.");
  664.   mprint("It giggles softly to itself and takes back the paper.");
  665. }
  666.  
  667.  
  668. void m_talk_scream(m)
  669. struct monster *m;
  670. {
  671.   mprint("A thinly echoing scream reaches your ears....");
  672.   morewait();
  673.   mprint("You feel doomed....");
  674.   morewait();
  675.   mprint("A bird appears and flies three times widdershins around your head.");
  676.   summon(-1,QUAIL);
  677.   m->talkf = M_TALK_EVIL;
  678. }
  679.  
  680.  
  681. void m_talk_archmage(m)
  682. struct monster *m;
  683. {
  684.   if (m_statusp(m,HOSTILE)) {
  685.     mprint("The Archmage ignores your attempt at conversation");
  686.     mprint("and concentrates on his spellcasting....");
  687.   }
  688.   else if (Current_Environment == E_COURT) {
  689.     mprint("The Archmage congratulates you on getting this far.");
  690.     mprint("He invites you to attempt the Throne of High Magic");
  691.     mprint("but warns you that it is important to wield the Sceptre");
  692.     mprint("before sitting on the throne.");
  693.     if (Level->site[m->x][m->y].p_locf == L_THRONE) {
  694.       mprint("The Archmage smiles and makes an arcane gesture....");
  695.       m_vanish(m);
  696.     }
  697.   }
  698.   else {
  699.     mprint("The Archmage tells you to find him again in his");
  700.     mprint("Magical Court at the base of his castle in the mountains");
  701.     mprint("of the far North-East; if you do he will give you some");
  702.     mprint("important information.");
  703.   }
  704. }
  705.  
  706.  
  707. void m_talk_merchant(m)
  708. struct monster *m;
  709. {
  710.   if (! m_statusp(m,HOSTILE)) {
  711.     if (Current_Environment == E_VILLAGE) {
  712.       mprint("The merchant asks you if you want to buy a horse for 250GP.");
  713.       mprint("Pay the merchant? [yn] ");
  714.       if (ynq()=='y') {
  715.     if (Player.cash < 250) 
  716.       mprint("The merchant says: 'Come back when you've got the cash!'");
  717.     else {
  718.       Player.cash -= 250;
  719.       mprint("The merchant takes your money and tells you to select");
  720.       mprint("any horse you want in the stables.");
  721.       mprint("He says: 'You'll want to get to know him before trying to");
  722.       mprint("ride him. By the way, food for the horse is not included.'");
  723.       mprint("The merchant runs off toward the bank, cackling gleefully.");
  724.       m_vanish(m);
  725.     }
  726.       }
  727.       else mprint("The merchant tells you to stop wasting his time.");
  728.     }
  729.     else {
  730.       mprint("The merchant tells you to visit his stables at his village");
  731.       mprint("for a great deal on a horse.");
  732.     }
  733.   }
  734.   else {
  735.     mprint("The merchant ignores you and screams:");
  736.     mprint("'Help! Help! I'm being oppressed!'");
  737.   }
  738. }
  739.   
  740.  
  741. void m_talk_prime(m)
  742. struct monster *m;
  743. {
  744.   if (!m_statusp(m,HOSTILE)) {
  745.     if (Current_Environment == E_CIRCLE) {
  746.       print1("The Prime nods brusquely at you, removes a gem from his");
  747.       print2("sleeve, places it on the floor, and vanishes wordlessly.");
  748.       morewait();
  749.       m_dropstuff(m);
  750.       m_vanish(m);
  751.     }
  752.     else {
  753.       print1("The Prime makes an intricate gesture, which leaves behind");
  754.       print2("glowing blue sparks... He winks mischievously at you....");
  755.       if (Player.rank[CIRCLE] > 0) {
  756.     morewait();
  757.     print1("The blue sparks strike you! You feel enhanced!");
  758.     print2("You feel more experienced....");
  759.     Player.pow+=Player.rank[CIRCLE];
  760.     Player.mana += calcmana();
  761.     gain_experience(1000);
  762.     m_vanish(m);
  763.       }
  764.     }
  765.   }
  766.   else m_talk_evil(m);
  767. }
  768.